class Animal:
    def __init__(self):
        print(f'{self}成功加入动物组！')

    def eat(self):
        print(f'{self}可以吃东西')


class Dog(Animal):
    def bark(self):
        print(f'{self}可以狗吠')


class XTQ(Dog):
    def fly(self):
        print(f'{self}可以上天入地')


anm = Animal()
anm.eat()
xiao_bai = Dog()
xiao_bai.bark()  # 显然处于类下的任何对象都可以调用该类下的任何方法
xiao_bai.eat()  # 此处可看出子类的对象也可以调用父类的方法
xtq = XTQ()
xtq.eat()  # 此处可看出子类的对象也可以调用父类的父类的方法
xtq.bark()  # 此处可看出子类的对象也可以调用父类的方法
xtq.fly()  # 显然处于类下的任何对象都可以调用该类下的任何方法
# 对象.方法 的执行逻辑是：先从这个对象的自己类下找该方法，找不到就去它的父类下找该方法，还找不到继续往上父类找，直至
# 找到类的源头，即 Object 类下，若还是没有这个方法，代码报错
# 例如：对象.__dict__ 这个方法调用是从 Object 类下找的
